#ifndef SRC_MATH_UTIL
#define SRC_MATH_UTIL

#include <vector>

//! Single-thread Version
//* Never find the same t
void find_t(long &t, unsigned long t_bits, const long m,
            const std::vector<long> &candidates);

//! Multi-thread Version
void find_ti(long &t, unsigned long t_bits, int t_index, const long m,
             const std::vector<long> &candidates);
void find_first_t(long &t, unsigned long t_bits, const long m,
                  const std::vector<long> &candidates);
void find_ti_auto(long &t, unsigned long t_bits, const long m,
                  const std::vector<long> &candidates);

void find_generators(std::vector<long> &gens, std::vector<long> &ords, long m,
                     long p, const std::vector<long> &candidates);

#endif /* SRC_MATH_UTIL */
